package com.tuars.instalacionesalberti.vistas.familia;

import java.awt.Color;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import com.tuars.instalacionesalberti.controllers.familia.BuscarFamilia;
import com.tuars.instalacionesalberti.controllers.familia.EliminarFamilia;
import com.tuars.instalacionesalberti.controllers.familia.ObtenerFamilias;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JPopupMenu;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;

import javax.swing.JMenuItem;

@SuppressWarnings("serial")
public class VistaMostrarFamilia extends JPanel{
	private JTextField textField;
	
	private ObtenerFamilias fam ;
	private JTable tblFamilia;
	private JScrollPane scpFamilia;
	private DefaultTableModel dtmFamilia;	

	private JMenuItem mntmCopiar;
	private JMenuItem mntmCortar;
	private JMenuItem mntmPegar;
	private JMenuItem mntmModificar;
	
	@SuppressWarnings("deprecation")
	public VistaMostrarFamilia(){
		setSize(964, 519);
		setBackground(new Color(70, 130, 180));
		setLayout(null);
		
		
		/**
		 * Tabla que mostrar� la base de datos
		 */
		fam = new ObtenerFamilias();
		tblFamilia = new JTable();
        scpFamilia= new JScrollPane();
 
        //Llenamos el modelo
        dtmFamilia = new DefaultTableModel(fam.getFilas(), fam.getColumnas());
 
        tblFamilia.setModel(dtmFamilia);
        scpFamilia.add(tblFamilia);
        this.add(scpFamilia);
        scpFamilia.setBounds(10, 62, 944, 446);
        tblFamilia.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        scpFamilia.setViewportView(tblFamilia);
                
        /**
         * Boton mostrar todos
         * este sirve para mostrar todos los registros de nuevo
         */
        final JButton btnMostrarTodos = new JButton("Mostrar todos");
		btnMostrarTodos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				recargarTabla();
		        
				btnMostrarTodos.setEnabled(false);
			}
		});
		btnMostrarTodos.setBounds(10, 11, 134, 23);
		btnMostrarTodos.setEnabled(false);
		add(btnMostrarTodos);
		
		/**
		 * Boton buscar
		 * JTextField para introducir la clausula a buscar
		 * Esta parte nos permitir� hacer busquedas en la tabla mostrada
		 */
		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				String sql = "SELECT * FROM FAMILIA WHERE Nombre LIKE '%"+textField.getText()+"%'";
				
				BuscarFamilia buscarFamilia = new BuscarFamilia();
				
		        try {
		            DefaultTableModel modelo=(DefaultTableModel) tblFamilia.getModel();
		            int filas=tblFamilia.getRowCount();
		            for (int i = 0;filas>i; i++) {
		                modelo.removeRow(0);
		            }
		        } catch (Exception e) {
		            JOptionPane.showMessageDialog(null, "Error al limpiar la tabla.");
		        }
		 
		        //Llenamos el modelo
		        dtmFamilia = new DefaultTableModel(buscarFamilia.getFilas(sql), buscarFamilia.getColumnas(sql));
		 
		        tblFamilia.setModel(dtmFamilia);
		        scpFamilia.add(tblFamilia);
		        add(scpFamilia);
		        scpFamilia.setBounds(10, 62, 944, 446);
		 
		        scpFamilia.setViewportView(tblFamilia);
		        
				btnMostrarTodos.setEnabled(true);
			}
		});
		btnBuscar.setBounds(867, 11, 87, 23);
		add(btnBuscar);
		
		textField = new JTextField();
		textField.setBounds(752, 12, 113, 20);
		add(textField);
		textField.setColumns(10);
		
		/**
		 * PopUpMenu que nos servira para:
		 * eliminar registros
		 */
		JPopupMenu popupMenu = new JPopupMenu();
        addPopup(tblFamilia, popupMenu);
        
        JMenuItem mntmEliminarFamilia = new JMenuItem("Eliminar");
        mntmEliminarFamilia.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				/**
				 * Estas quatro primeras lineas eliminan el registro de la tabla
				 */
				int row = tblFamilia.getSelectedRow();
				
				String registroEliminar = (String) tblFamilia.getValueAt(row, 0);
				EliminarFamilia eliminarFamilia = new EliminarFamilia();
				eliminarFamilia.eliminarRegistro(registroEliminar);
				
				recargarTabla();
				
			}
		});
        popupMenu.add(mntmEliminarFamilia);
        
        /**
         * Item popupMenu para modificar un rejistro
         * Proceso: Abrir Nueva ventana y modificar los campos elejidos
         */
        mntmModificar = new JMenuItem("Modificar");
        mntmModificar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int row = tblFamilia.getSelectedRow();
				String codigoRegistroModificar = (String)tblFamilia.getValueAt(row, 0);
				String nombreRegistroModificar = (String)tblFamilia.getValueAt(row, 1);
				
				try {
										
					VistaModificarFamilia viewModFam = new VistaModificarFamilia();
					viewModFam.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
					viewModFam.setVisible(true);
					
					viewModFam.obtenerDatosCampos(codigoRegistroModificar, nombreRegistroModificar);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
        popupMenu.add(mntmModificar);
        
        popupMenu.addSeparator();
        
        mntmCopiar = new JMenuItem("Copiar");
        mntmCopiar.disable();
        popupMenu.add(mntmCopiar);
        
        mntmCortar = new JMenuItem("Cortar");
        mntmCortar.disable();
        popupMenu.add(mntmCortar);
        
        mntmPegar = new JMenuItem("Pegar");
        mntmPegar.disable();
        popupMenu.add(mntmPegar);
		
		
	}
	
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}
	
	public void recargarTabla(){
		
		try {
            DefaultTableModel modelo=(DefaultTableModel) tblFamilia.getModel();
            int filas=tblFamilia.getRowCount();
            for (int i = 0;filas>i; i++) {
                modelo.removeRow(0);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error al limpiar la tabla.");
        }
		
		//Llenamos el modelo
        dtmFamilia = new DefaultTableModel(fam.getFilas(), fam.getColumnas());
        
        tblFamilia.setModel(dtmFamilia);
        scpFamilia.add(tblFamilia);
        add(scpFamilia);
        scpFamilia.setBounds(10, 62, 944, 446);
 
        scpFamilia.setViewportView(tblFamilia);
	}
	
	
}
